package com.test.design.pattern.factory.factory_method;

/**
 * @ClasName CoffeeFactory
 * @Descripution TODO
 * @Author leikw
 * @Date 2021/11/6 16:56
 * @Version V1.0
 */
public interface CoffeeFactory {
    Coffee createCoffee();
}

//工厂方法模式的主要角色：
//抽象工厂（Abstract Factory）：提供了创建产品的接口，调用者通过它访问具体工厂的工厂
//方法来创建产品。
//具体工厂（ConcreteFactory）：主要是实现抽象工厂中的抽象方法，完成具体产品的创建。
//抽象产品（Product）：定义了产品的规范，描述了产品的主要特性和功能。
//具体产品（ConcreteProduct）：实现了抽象产品角色所定义的接口，由具体工厂来创建，它同
//具体工厂之间一一对应。

//从以上的编写的代码可以看到，要增加产品类时也要相应地增加工厂类，不需要修改工厂类的代码了，
//这样就解决了简单工厂模式的缺点。
//工厂方法模式是简单工厂模式的进一步抽象。由于使用了多态性，工厂方法模式保持了简单工厂模式的
//优点，而且克服了它的缺点。

//用户只需要知道具体工厂的名称就可得到所要的产品，无须知道产品的具体创建过程；
//在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类，无须对原工厂进行任何修改，
//满足开闭原则；

//每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类，这增加了系统的复杂度。
